using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace FiltronASP.Helpers.HtmlTags
{
    /// <summary>
    /// Klasa pomocnicza do generowania tagow htmlowych, ktorych nie idzie wygenerowac przez <code>HtmlHelper</code>.
    /// </summary>
    public static class HtmlImageHelper
    {
        /// <summary>
        /// Metoda generujaca obrazek na podstawie nazwy.
        /// </summary>
        /// <param name="imgFileName">nazwa pliku z obrazkiem</param>
        /// <returns>Obrazek</returns>
        public static string Image(this HtmlHelper htmlHelper, string imgFileName)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            if (!String.IsNullOrEmpty(imgFileName))
            {
                TagBuilder imgTagBuilder = new TagBuilder("img");
                imgTagBuilder.MergeAttribute("src", urlHelper.GenerateAdminImageLink(imgFileName));
                return imgTagBuilder.ToString(TagRenderMode.Normal);
            }   //if
            return null;
        }


        /// <summary>
        /// Metoda generujaca linka z obrazkiem w srodku na podstawie zadanych parametrow.
        /// </summary>
        /// <param name="htmlHelper">html helper z c#</param>
        /// <param name="imgFileName">nazwa pliku z obrazkiem</param>
        /// <param name="linkText">tekst linka (lub puste, gdy sam obrazek ma byc)</param>
        /// <param name="actionName">nazwa akcji, do ktorej linkujemy; kontroler domyslny dla widoku</param>
        /// <returns>link z obrazkiem</returns>
        public static string ActionLinkWithImage(this HtmlHelper htmlHelper, string imgFileName, string linkText, 
            string actionName)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            TagBuilder tagBuilder = new TagBuilder("a");
            if (!String.IsNullOrEmpty(imgFileName))
            {
                TagBuilder imgTagBuilder = new TagBuilder("img");
                imgTagBuilder.MergeAttribute("src", urlHelper.GenerateAdminImageLink(imgFileName));
                tagBuilder.InnerHtml = imgTagBuilder.ToString(TagRenderMode.SelfClosing);
            }   //if
            if (!String.IsNullOrEmpty(linkText))
            {
                tagBuilder.InnerHtml += linkText;
            }   //if
            tagBuilder.MergeAttribute("href", urlHelper.Action(actionName));
            return tagBuilder.ToString(TagRenderMode.Normal);
        }

        /// <summary>
        /// Metoda generujaca linka z obrazkiem w srodku na podstawie zadanych parametrow.
        /// </summary>
        /// <param name="htmlHelper">html helper z c#</param>
        /// <param name="imgFileName">nazwa pliku z obrazkiem</param>
        /// <param name="linkText">tekst linka (lub puste, gdy sam obrazek ma byc)</param>
        /// <param name="actionName">nazwa akcji, do ktorej linkujemy; kontroler domyslny dla widoku</param>
        /// <param name="routeValues">parametry przekazywane do akcji</param>
        /// <returns>link z obrazkiem</returns>
        public static string ActionLinkWithImage(this HtmlHelper htmlHelper, string imgFileName, string linkText, 
            string actionName, object routeValues)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            TagBuilder tagBuilder = new TagBuilder("a");
            if (!String.IsNullOrEmpty(imgFileName))
            {
                TagBuilder imgTagBuilder = new TagBuilder("img");
                imgTagBuilder.MergeAttribute("src", urlHelper.GenerateAdminImageLink(imgFileName));
                tagBuilder.InnerHtml = imgTagBuilder.ToString(TagRenderMode.SelfClosing);
            }   //if
            if (!String.IsNullOrEmpty(linkText))
            {
                tagBuilder.InnerHtml += linkText;
            }   //if
            tagBuilder.MergeAttribute("href", urlHelper.Action(actionName, routeValues));
            return tagBuilder.ToString(TagRenderMode.Normal);
        }

        /// <summary>
        /// Metoda generujaca linka z obrazkiem w srodku na podstawie zadanych parametrow.
        /// </summary>
        /// <param name="htmlHelper">html helper z c#</param>
        /// <param name="imgFileName">nazwa pliku z obrazkiem</param>
        /// <param name="linkText">tekst linka (lub puste, gdy sam obrazek ma byc)</param>
        /// <param name="actionName">nazwa akcji, do ktorej linkujemy</param>
        /// <param name="controllerName">kontroler, w ktorym akcja, do ktorej linkujemy</param>
        /// <returns>link z obrazkiem</returns>
        public static string ActionLinkWithImage(this HtmlHelper htmlHelper, string imgFileName, string linkText, 
            string actionName, string controllerName)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            TagBuilder tagBuilder = new TagBuilder("a");
            if (!String.IsNullOrEmpty(imgFileName))
            {
                TagBuilder imgTagBuilder = new TagBuilder("img");
                imgTagBuilder.MergeAttribute("src", urlHelper.GenerateAdminImageLink(imgFileName));
                tagBuilder.InnerHtml = imgTagBuilder.ToString(TagRenderMode.SelfClosing);
            }   //if
            if (!String.IsNullOrEmpty(linkText))
            {
                tagBuilder.InnerHtml += linkText;
            }   //if
            tagBuilder.MergeAttribute("href", urlHelper.Action(actionName, controllerName));
            return tagBuilder.ToString(TagRenderMode.Normal);
        }

        /// <summary>
        /// Metoda generujaca linka z obrazkiem w srodku na podstawie zadanych parametrow.
        /// </summary>
        /// <param name="htmlHelper">html helper z c#</param>
        /// <param name="imgFileName">nazwa pliku z obrazkiem</param>
        /// <param name="linkText">tekst linka (lub puste, gdy sam obrazek ma byc)</param>
        /// <param name="actionName">nazwa akcji, do ktorej linkujemy</param>
        /// <param name="controllerName">kontroler, w ktorym akcja, do ktorej linkujemy</param>
        /// <param name="routeValues">parametry przekazywane do akcji</param>
        /// <returns>link z obrazkiem</returns>
        public static string ActionLinkWithImage(this HtmlHelper htmlHelper, string imgFileName, string linkText, 
            string actionName, string controllerName, object routeValues)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            TagBuilder tagBuilder = new TagBuilder("a");
            if (!String.IsNullOrEmpty(imgFileName))
            {
                TagBuilder imgTagBuilder = new TagBuilder("img");
                imgTagBuilder.MergeAttribute("src", urlHelper.GenerateAdminImageLink(imgFileName));
                tagBuilder.InnerHtml = imgTagBuilder.ToString(TagRenderMode.SelfClosing);
            }   //if
            if (!String.IsNullOrEmpty(linkText))
            {
                tagBuilder.InnerHtml += linkText;
            }   //if
            tagBuilder.MergeAttribute("href", urlHelper.Action(actionName, controllerName, routeValues));
            return tagBuilder.ToString(TagRenderMode.Normal);
        }


    }
}
